package edu.ues21.tcs.ecommerce2011.mvc.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;

import edu.ues21.tcs.ecommerce2011.mvc.model.Articulo;
import edu.ues21.tcs.ecommerce2011.mvc.model.Marca;

@Transactional
public class ArticuloDAOImpl implements ArticuloDAO {

	// Declaro el hibernate template.iberna
	private HibernateTemplate hibernateTemplate;

	// Le seteo el sessionFactory que le inyecto al hibernateTemplate.
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.hibernateTemplate = new HibernateTemplate(sessionFactory);
		// this.sessionFactory = sessionFactory;
		// this.hibernateTemplate.setSessionFactory(sessionFactory);
	}

	public void save(Articulo articulo, Integer idMarca) {

		System.out.println("ANTES DEL SESSION MARCA");
		Marca marca = (Marca) hibernateTemplate.get(Marca.class, idMarca);
		System.out.println("DESPUES DEL SESSION MARCA" + marca.getNombre());

		// Agrego el articulo a la marca.
	//	marca.getArticulos().add(articulo);
		System.out.println("PASA+++++++++++++++++++++++++++++"
				+ articulo.getNombre());
		// Persisto los cambios en la marca.
		hibernateTemplate.merge(marca);

	}

	public void delete(Integer idArticulo) {

		Articulo articulo = (Articulo) hibernateTemplate.load(Articulo.class,
				idArticulo);
		// Elimino el articulo de la tabla Articulo.
		hibernateTemplate.delete(articulo);

		// Elimino el articulo de la JoinTable marca_articulo.
		hibernateTemplate
				.getSessionFactory()
				.getCurrentSession()
				.createSQLQuery(
						"DELETE FROM marca_articulo " + "WHERE articulo="
								+ idArticulo).executeUpdate();

	}

	@SuppressWarnings("unchecked")
	@Transactional(readOnly = true)
	public List<Articulo> getAll() {

		return hibernateTemplate.find("from Articulo");
	}

	@Transactional(readOnly = true)
	public Articulo getArticulo(Integer id) {

		return hibernateTemplate.get(Articulo.class, id);
	}

}
